/*
 *
 *    Copyright (c) 2021 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP

// Prevent multiple inclusion
#pragma once

#include <app/util/basic-types.h>
#include <lib/support/Span.h>
#include <stdint.h>
#include <system/SystemPacketBuffer.h>

/*----------------------------------------------------------------------------*\
| Cluster Name                                                        |   ID   |
|---------------------------------------------------------------------+--------|
| Basic                                                               | 0x0028 |
| DiagnosticLogs                                                      | 0x0032 |
| EthernetNetworkDiagnostics                                          | 0x0037 |
| FlowMeasurement                                                     | 0x0404 |
| GeneralCommissioning                                                | 0x0030 |
| GeneralDiagnostics                                                  | 0x0033 |
| LevelControl                                                        | 0x0008 |
| NetworkCommissioning                                                | 0x0031 |
| OnOff                                                               | 0x0006 |
| OperationalCredentials                                              | 0x003E |
| PressureMeasurement                                                 | 0x0403 |
| PumpConfigurationAndControl                                         | 0x0200 |
| SoftwareDiagnostics                                                 | 0x0034 |
| TemperatureMeasurement                                              | 0x0402 |
| ThreadNetworkDiagnostics                                            | 0x0035 |
| WiFiNetworkDiagnostics                                              | 0x0036 |
\*----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*\
| Cluster FlowMeasurement                                             | 0x0404 |
|------------------------------------------------------------------------------|
| Commands:                                                           |        |
|------------------------------------------------------------------------------|
| Attributes:                                                         |        |
| * MeasuredValue                                                     | 0x0000 |
| * MinMeasuredValue                                                  | 0x0001 |
| * MaxMeasuredValue                                                  | 0x0002 |
| * ClusterRevision                                                   | 0xFFFD |
\*----------------------------------------------------------------------------*/

/**
 * @brief
 *    Encode a Flow Measurement server discover command into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeFlowMeasurementClusterDiscoverAttributes(uint8_t seqNum,
                                                                                chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Flow Measurement server read command for the measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeFlowMeasurementClusterReadMeasuredValueAttribute(uint8_t seqNum,
                                                                                        chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Flow Measurement server configure report command for the measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeFlowMeasurementClusterConfigureMeasuredValueAttribute(uint8_t seqNum,
                                                                                             chip::EndpointId destinationEndpoint,
                                                                                             uint16_t minInterval,
                                                                                             uint16_t maxInterval, int16_t change);

/**
 * @brief
 *    Encode a Flow Measurement server read command for the min measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeFlowMeasurementClusterReadMinMeasuredValueAttribute(uint8_t seqNum,
                                                                                           chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Flow Measurement server read command for the max measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeFlowMeasurementClusterReadMaxMeasuredValueAttribute(uint8_t seqNum,
                                                                                           chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Flow Measurement server read command for the cluster revision attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeFlowMeasurementClusterReadClusterRevisionAttribute(uint8_t seqNum,
                                                                                          chip::EndpointId destinationEndpoint);

/*----------------------------------------------------------------------------*\
| Cluster LevelControl                                                | 0x0008 |
|------------------------------------------------------------------------------|
| Commands:                                                           |        |
| * Move                                                              |   0x01 |
| * MoveToLevel                                                       |   0x00 |
| * MoveToLevelWithOnOff                                              |   0x04 |
| * MoveWithOnOff                                                     |   0x05 |
| * Step                                                              |   0x02 |
| * StepWithOnOff                                                     |   0x06 |
| * Stop                                                              |   0x03 |
| * StopWithOnOff                                                     |   0x07 |
|------------------------------------------------------------------------------|
| Attributes:                                                         |        |
| * CurrentLevel                                                      | 0x0000 |
| * ClusterRevision                                                   | 0xFFFD |
\*----------------------------------------------------------------------------*/

/**
 * @brief
 *    Encode a Level Control server discover command into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeLevelControlClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Level Control server read command for the current level attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeLevelControlClusterReadCurrentLevelAttribute(uint8_t seqNum,
                                                                                    chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Level Control server configure report command for the current level attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeLevelControlClusterConfigureCurrentLevelAttribute(uint8_t seqNum,
                                                                                         chip::EndpointId destinationEndpoint,
                                                                                         uint16_t minInterval, uint16_t maxInterval,
                                                                                         uint8_t change);

/**
 * @brief
 *    Encode a Level Control server read command for the cluster revision attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeLevelControlClusterReadClusterRevisionAttribute(uint8_t seqNum,
                                                                                       chip::EndpointId destinationEndpoint);

/*----------------------------------------------------------------------------*\
| Cluster OnOff                                                       | 0x0006 |
|------------------------------------------------------------------------------|
| Commands:                                                           |        |
| * Off                                                               |   0x00 |
| * On                                                                |   0x01 |
| * Toggle                                                            |   0x02 |
|------------------------------------------------------------------------------|
| Attributes:                                                         |        |
| * OnOff                                                             | 0x0000 |
| * ClusterRevision                                                   | 0xFFFD |
\*----------------------------------------------------------------------------*/

/**
 * @brief
 *    Encode a On/off server discover command into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeOnOffClusterDiscoverAttributes(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a On/off server read command for the on/off attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeOnOffClusterReadOnOffAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a On/off server read command for the cluster revision attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeOnOffClusterReadClusterRevisionAttribute(uint8_t seqNum,
                                                                                chip::EndpointId destinationEndpoint);

/*----------------------------------------------------------------------------*\
| Cluster PressureMeasurement                                         | 0x0403 |
|------------------------------------------------------------------------------|
| Commands:                                                           |        |
|------------------------------------------------------------------------------|
| Attributes:                                                         |        |
| * MeasuredValue                                                     | 0x0000 |
| * MinMeasuredValue                                                  | 0x0001 |
| * MaxMeasuredValue                                                  | 0x0002 |
| * ClusterRevision                                                   | 0xFFFD |
\*----------------------------------------------------------------------------*/

/**
 * @brief
 *    Encode a Pressure Measurement server discover command into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodePressureMeasurementClusterDiscoverAttributes(uint8_t seqNum,
                                                                                    chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pressure Measurement server read command for the measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodePressureMeasurementClusterReadMeasuredValueAttribute(uint8_t seqNum,
                                                                                            chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pressure Measurement server configure report command for the measured value attribute into buffer including the APS
 * frame
 */
chip::System::PacketBufferHandle
encodePressureMeasurementClusterConfigureMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                uint16_t minInterval, uint16_t maxInterval, int16_t change);

/**
 * @brief
 *    Encode a Pressure Measurement server read command for the min measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodePressureMeasurementClusterReadMinMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pressure Measurement server read command for the max measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodePressureMeasurementClusterReadMaxMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pressure Measurement server read command for the cluster revision attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodePressureMeasurementClusterReadClusterRevisionAttribute(uint8_t seqNum,
                                                                                              chip::EndpointId destinationEndpoint);

/*----------------------------------------------------------------------------*\
| Cluster PumpConfigurationAndControl                                 | 0x0200 |
|------------------------------------------------------------------------------|
| Commands:                                                           |        |
|------------------------------------------------------------------------------|
| Attributes:                                                         |        |
| * MaxPressure                                                       | 0x0000 |
| * MaxSpeed                                                          | 0x0001 |
| * MaxFlow                                                           | 0x0002 |
| * EffectiveOperationMode                                            | 0x0011 |
| * EffectiveControlMode                                              | 0x0012 |
| * Capacity                                                          | 0x0013 |
| * OperationMode                                                     | 0x0020 |
| * ClusterRevision                                                   | 0xFFFD |
\*----------------------------------------------------------------------------*/

/**
 * @brief
 *    Encode a Pump Configuration and Control server discover command into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodePumpConfigurationAndControlClusterDiscoverAttributes(uint8_t seqNum,
                                                                                            chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the max pressure attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadMaxPressureAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the max speed attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadMaxSpeedAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the max flow attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodePumpConfigurationAndControlClusterReadMaxFlowAttribute(uint8_t seqNum,
                                                                                              chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the effective operation mode attribute into buffer including
 * the APS frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadEffectiveOperationModeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the effective control mode attribute into buffer including the
 * APS frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadEffectiveControlModeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the capacity attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadCapacityAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server configure report command for the capacity attribute into buffer including the
 * APS frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterConfigureCapacityAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                   uint16_t minInterval, uint16_t maxInterval, int16_t change);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the operation mode attribute into buffer including the APS
 * frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadOperationModeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Pump Configuration and Control server write command for the operation mode attribute into buffer including the APS
 * frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterWriteOperationModeAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                    uint8_t operationMode);

/**
 * @brief
 *    Encode a Pump Configuration and Control server read command for the cluster revision attribute into buffer including the APS
 * frame
 */
chip::System::PacketBufferHandle
encodePumpConfigurationAndControlClusterReadClusterRevisionAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/*----------------------------------------------------------------------------*\
| Cluster TemperatureMeasurement                                      | 0x0402 |
|------------------------------------------------------------------------------|
| Commands:                                                           |        |
|------------------------------------------------------------------------------|
| Attributes:                                                         |        |
| * MeasuredValue                                                     | 0x0000 |
| * MinMeasuredValue                                                  | 0x0001 |
| * MaxMeasuredValue                                                  | 0x0002 |
| * ClusterRevision                                                   | 0xFFFD |
\*----------------------------------------------------------------------------*/

/**
 * @brief
 *    Encode a Temperature Measurement server discover command into buffer including the APS frame
 */
chip::System::PacketBufferHandle encodeTemperatureMeasurementClusterDiscoverAttributes(uint8_t seqNum,
                                                                                       chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Temperature Measurement server read command for the measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodeTemperatureMeasurementClusterReadMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Temperature Measurement server configure report command for the measured value attribute into buffer including the
 * APS frame
 */
chip::System::PacketBufferHandle
encodeTemperatureMeasurementClusterConfigureMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint,
                                                                   uint16_t minInterval, uint16_t maxInterval, int16_t change);

/**
 * @brief
 *    Encode a Temperature Measurement server read command for the min measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodeTemperatureMeasurementClusterReadMinMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Temperature Measurement server read command for the max measured value attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodeTemperatureMeasurementClusterReadMaxMeasuredValueAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);

/**
 * @brief
 *    Encode a Temperature Measurement server read command for the cluster revision attribute into buffer including the APS frame
 */
chip::System::PacketBufferHandle
encodeTemperatureMeasurementClusterReadClusterRevisionAttribute(uint8_t seqNum, chip::EndpointId destinationEndpoint);
